const jwt = require('jsonwebtoken')

module.exports = options => {
    return async function token(ctx,next) {
        // console.log('ctx:'+JSON.stringify(ctx))
        let url = ctx.url
        if (options.URL_VERTIFY.includes(url)) {
            let token;
            if (ctx.method === 'POST') {
                token = ctx.get('Authorization')
            }else if (ctx.method === 'GET') {
                token = ctx.query.token
            }
            if (!token) {
                ctx.status = 200
                ctx.body = {
                code: 401,
                msg: '未登录！',
                }
                return
            }
            try {
                let { str = '' } = await jwt.verify(token, options.TOKEN_ENCODE_STR)
                let res = await ctx.model.User.findOne({ user_id: str, token })
                if (res.id) {
                    ctx._id = res._id
                    ctx.name = res.user_name
                    ctx.avatar = res.avatar
                    ctx.sign = res.sign
                }else{
                    ctx.body = {
                        code: 401,
                        msg: '登录过期,请重新登录!',
                    }
                }
            }catch(e) {
                ctx.body = {
                    code: 401,
                    msg: 'token已经过期了！重新登录',
                }
                return
            }
        }
        await next();
    }
}